package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import util.DBUtils;

public class StatementDemo {
	/**
	 * jdbc: java以何种方式连接数据库
	 * mysql: 目标数据库类型
	 * //localhost: 数据库所在ip地址/主机名
	 * 3306:  数据库服务器端口号
	 * scott_db: 要操作的数据库
	 * charset=utf8 : 连接字符编码
	 * serverTimezone=GMT: 设置服务器时区
	 */
	static final String URL = "jdbc:mysql://localhost:3306/scott_db?charset=utf8&serverTimezone=GMT%2B8";
	static final String USER_NAME = "root";
	static final String PASSWORD = "123456";
	Connection conn;  // 全局，每个方法都可以使用
	
	@Before  // 改成每个测试的前置条件
	public void conn() throws Exception {
		// 1.加载驱动到内存   反射技术：把字符串映射为实际的类/ 映射方法/ 映射属性
		Class.forName("com.mysql.cj.jdbc.Driver");
		/* 2.得到连接
		 arg0: url 连接路径
		 arg1: username 数据库的用户名
		 arg2: password 密码
		*/
		conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
		
		System.out.println(conn);
		// 3.关闭
		// conn.close();
	}
	
	@Test
	public void insert() throws SQLException {
		// 3.得到句柄
		Statement s = DBUtils.getConnection().createStatement();
		// 4.执行更新语句
		int deptno = 100;
		String dname = "a";
		String loc = "a";
		String sql = "insert into dept values(" + deptno + ",'"+ dname + "','" + loc + "'" + ")";
		int row = s.executeUpdate(sql);
		System.out.println(row);
		// 5.关闭
		s.close();
	}
	
	@Test
	public void update() throws SQLException {
		// 3.得到句柄
		Statement s = DBUtils.getConnection().createStatement();
		// 4.执行更新语句
		int row = s.executeUpdate("update dept set dname='abc',loc='abc' where deptno=100");
		System.out.println(row);
		// 5.关闭
		s.close();
	}
	
	@Test
	public void delete() throws SQLException {
		// 3.得到句柄
		Statement s = DBUtils.getConnection().createStatement();
		// 4.执行更新语句
		int row = s.executeUpdate("delete from dept where deptno=100");
		System.out.println(row);
		// 5.关闭
		s.close();
	}
	
	@Test
	public void select() throws SQLException {
		// 3.通过连接得到句柄
		Statement s = conn.createStatement();
		// 4.执行SQL语句
		ResultSet set = s.executeQuery("select * from dept");
		// 5.遍历结果集
		while(set.next()) {
			// 4.拿此行数据
			System.out.println("-----------------");
			System.out.println("deptno:" + set.getInt(1));
			System.out.println("dname:" + set.getString(2));
			System.out.println("loc:" + set.getString(3));
		}
		// 6.关闭结果集
		set.close();
		s.close();
	}
}








